package com.example.administrator.appstpremvpdemo.view.activity;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentTransaction;

import com.example.administrator.appstpremvpdemo.common.MainApplication;
import com.example.administrator.appstpremvpdemo.helper.PermissionHelper;
import com.example.administrator.appstpremvpdemo.helper.SplashResBlockHelper;
import com.example.administrator.appstpremvpdemo.view.fragment.LaunchBaseFragment;
import com.example.administrator.appstpremvpdemo.view.fragment.LaunchDefaultFragment;

/**
 * @Author Administrator
 * @Date 2017/12/11
 * @function 启动页
 * @description 继承BaseActivity基类，要处理6.0以上权限问题，所以考虑实现处理权限的接口
 * 应用商店启动页和闪屏的逻辑：
 * 1.当应用第一次启动时，启动页背景正常显示一张本地的logo图片。
 * 2.同时application启动的时候就会开启一个异步线程去获取上次缓存的图片实体类（这个图片类包含图片，点击图片跳转到哪等信息）
 * 获取完成后存在一个静态实体类中，供闪屏的fragment使用。
 * 如果没有获取到缓存实体，就设置实体中flag为启用系统图片。（不建议在没拿到缓存就去加载网络，因为这样在网络不好的时候无法
 * 控制应用启动的总时间，没有网就不用说直接显示系统图片或者直接跳转首页）
 * 3.在LaunchActivity启动页销毁的时候开启异步线程去联网获取最新的闪屏页实体信息并缓存起来备下次启动时使用。
 */

public class LaunchActivity extends BaseActivity implements PermissionHelper.ICheckAllPermissions
        , LaunchBaseFragment.ILaunchCommplete {

    private PermissionHelper mIPermissionHelper;
    private LaunchDefaultFragment mLaunchDefaultFragment;

    public LaunchActivity() {
        //构造的时候就开启异步线程去加载闪屏页缓存实体
        MainApplication.getInstance().asynLoadSplashEntity();

    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        attachLaunchFragment();
        initPermission();
    }

    private void attachLaunchFragment() {
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        mLaunchDefaultFragment = new LaunchDefaultFragment();
        transaction.add(android.R.id.content, mLaunchDefaultFragment);
        transaction.commit();
    }

    @Override
    public void permissionsGranted() {
        //权限检查完毕后，可以进行装机必备页的预加载
    }

    private void initPermission() {
        mIPermissionHelper = new PermissionHelper(this);
        mIPermissionHelper.setCheckAllPermissions(this);
        mIPermissionHelper.requestPermissions();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //这个时候可以去异步请求网络获取最新的闪屏页数据并缓存了。
        SplashResBlockHelper.requestLatestSplashDataFromServer();
    }

    @Override
    public void onLaunchCommplete(Class<?> clazz) {
        goTo(this, clazz, true);
    }
}
